package paidaxing.blog.post.mapper;

import paidaxing.blog.post.entity.Posts;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 文章数据访问接口
 */
@Mapper
public interface PostsDao {

    /**
     * 根据ID查询文章
     * 
     * @param id 文章ID
     * @return 文章实体
     */
    Posts queryById(Long id);

    /**
     * 统计文章总数
     * 
     * @param posts 查询条件
     * @return 文章总数
     */
    long count(@Param("posts") Posts posts);

    /**
     * 根据查询条件和文章ID列表统计文章总数
     * 
     * @param posts 查询条件
     * @param postIds 文章ID列表
     * @return 文章总数
     */
    long countByPostIds(@Param("posts") Posts posts, @Param("postIds") List<Long> postIds);

    /**
     * 插入文章
     * 
     * @param posts 文章实体
     * @return 影响行数
     */
    int insert(Posts posts);

    /**
     * 批量插入文章
     * 
     * @param entities 文章列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<Posts> entities);

    /**
     * 批量插入或更新文章
     * 
     * @param entities 文章列表
     * @return 影响行数
     */
    int insertOrUpdateBatch(@Param("entities") List<Posts> entities);

    /**
     * 更新文章
     * 
     * @param posts 文章实体
     * @return 影响行数
     */
    int update(Posts posts);

    /**
     * 根据ID删除文章
     * 
     * @param id 文章ID
     * @return 影响行数
     */
    int deleteById(Long id);
    
    /**
     * 分页查询文章列表
     * 
     * @param posts 查询条件
     * @param offset 偏移量
     * @param limit 每页数量
     * @return 文章列表
     */
    List<Posts> selectPostsByPage(@Param("posts") Posts posts, @Param("offset") int offset, @Param("limit") int limit);
    
    /**
     * 根据标签ID列表分页查询文章
     * 
     * @param posts 查询条件
     * @param postIds 文章ID列表
     * @param offset 偏移量
     * @param limit 每页数量
     * @return 文章列表
     */
    List<Posts> selectPostsByTagAndPage(@Param("posts") Posts posts, @Param("postIds") List<Long> postIds, 
                                       @Param("offset") int offset, @Param("limit") int limit);

}